package com.anxin.act.task.service;

import java.util.ArrayList;
import java.util.List;

import com.anxin.act.task.dao.WfActHiTaskDao;
import com.anxin.act.task.dao.WfCcRecordDao;
import com.anxin.act.task.entity.ViewHiTask;
import com.anxin.act.task.entity.WfActHiTask;
import com.anxin.act.task.entity.WfActRuTask;
import com.anxin.common.utils.StringUtils;
import com.anxin.framework.web.service.BaseService;
import com.anxin.common.utils.SecurityUtils;
import com.anxin.sys.file.dao.FileBaseDao;
import com.anxin.sys.system.entity.SysUser;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

/**
 * 加签任务历史Service业务层处理
 *
 * @author jbs
 * @date 2021-10-22
 */
@Service
public class WfActHiTaskService extends BaseService<WfActHiTaskDao, WfActHiTask>{
    @Autowired
    private WfActHiTaskDao wfActHiTaskDao;
    @Autowired
    private FileBaseDao fileBaseDao;
    @Autowired
    private WfCcRecordDao wfCcRecordDao;

    /**
     * 查询加签任务历史
     *
     * @param id 加签任务历史ID
     * @return 加签任务历史
     */
    public WfActHiTask getById(String id){
        return wfActHiTaskDao.getById(id);
    }

    /**
     * 查询加签任务历史列表
     *
     * @param wfActHiTask 加签任务历史
     * @return 加签任务历史
     */
    public List<WfActHiTask> findList(WfActHiTask wfActHiTask){
        List<WfActHiTask> list = new ArrayList<>();
        if (StringUtils.isNotNull(wfActHiTask)){
            list = wfActHiTaskDao.findList(wfActHiTask);
        }
        return list;
    }



    /**
     * 保存加签任务历史
     *
     * @param wfActHiTask 加签任务历史
     * @return 结果
     */
    public int save(WfActHiTask wfActHiTask){
        return super.save(wfActHiTask);
    }

    /**
     * 撤销时删除任务，包括附件，抄送等信息
     * @param viewHiTask
     */
    @Transactional(readOnly = false)
    public void delByTaskId(ViewHiTask viewHiTask){
        WfActHiTask wfActHiTask = new WfActHiTask();
        wfActHiTask.setActTaskId(viewHiTask.getTaskId());

        List<WfActHiTask> taskList = wfActHiTaskDao.findList(wfActHiTask);
        for (WfActHiTask task : taskList) {
            // 删除附件
            fileBaseDao.deleteFile("act_approval",task.getId());
            // 删除抄送记录
            wfCcRecordDao.delByTaskId(task.getId());
        }
        // 删除加签任务本身
        wfActHiTaskDao.delByTaskId(viewHiTask);
    }


    /**
     * 撤回时删除任务，包括附件，抄送等信息
     * @param viewHiTask
     */
    @Transactional(readOnly = false)
    public void delAllByTaskId(ViewHiTask viewHiTask){
        wfActHiTaskDao.delByTaskId(viewHiTask);
    }

    /**
     * 撤回时根据SourceId删除任务
     * @param sourceId
     */
    @Transactional(readOnly = false)
    public void delBySourceId(String sourceId){
        List<WfActHiTask> wfActHiTaskList = wfActHiTaskDao.findBySourceId(sourceId);
        for (WfActHiTask wfActHiTask : wfActHiTaskList) {
            this.delBySourceId(wfActHiTask.getId());
            wfActHiTaskDao.deleteById(wfActHiTask.getId());
        }
    }


    /**
     * 删除加签任务历史信息
     *
     * @param id 加签任务历史ID
     * @return 结果
     */
    public int deleteById(String id){
        SysUser user = SecurityUtils.getUser();
        return wfActHiTaskDao.deleteById(id,user.getId());
    }

    /**
     * 修改流程审批人
     * @param id 任务ID
     * @param assignee 新的审批人
     */
    public void updateAssignee(String id, String assignee){
        wfActHiTaskDao.updateAssignee(id,assignee);
    }
}
